package com.bw.itext.pdf.utils;

import com.bw.itext.pdf.annotation.PdfValue;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.layout.Style;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.borders.DashedBorder;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 */
public class PdfUtil {

    /**
     * 创建没有边框的Cell --设置字体大小为8，内边距设置成0，边框设置为无边框
     * @return
     */
    public static Cell getCellNoBorder(){
        //setBorder(Border.)
        return new Cell().setFontSize(10).setPaddings(0,0,0,0).setBorder(Border.NO_BORDER);
    }

    /**
     * 获取上边框为虚线的cell--因为默认情况下，边框默认是黑色实线边框，这里要把上边框设置成虚线并设置字体
     * @return
     */
    public static Cell getCellDashedBorder(){
        return new Cell().addStyle(new Style().setBorderTop(new DashedBorder(1))).setBorder(Border.NO_BORDER).setFontSize(10);
    }

    /**
     * 创建两列的表格并插入图片
     * @return
     */
    public static Table createTable(int numColumns){
        //创建两列的表格
        //表格在pdf整个页面的宽度百分比，这个值越小，整个个pdf表格越小，越靠近左边(这样说可能不对，大家可以试下)
        //设置外边距
        //设置图片在第一行表格中，cell(1,2) 代表这一行，有两列合并成一列，图像设置成自适应。这里有一个问题，就是当图像设置成自适应的时候通过new Table(new float[]{4,6})——创建两列的表格，列长度就是每个数组长度 创建的表格就会出现表格列长度改变的问题。
        return new Table(numColumns).
                setWidth(UnitValue.createPercentValue(100)).
                setMarginTop(10);
    }

    /**
     * 排序并生成指定样式的表格
     * @param a
     * @param map
     * @param font
     * @param table
     */
    public static void generateNormalTable(Field[] a, Map<String,Object> map, PdfFont font, Table table){
        for (Field field : a) { //遍历模板字段
            PdfValue annotation = field.getDeclaredAnnotation(PdfValue.class);//获取字段属性上的注释
            if (annotation == null) {
                continue;
            }
            if (0==annotation.typeFile()){
                //如果是没有边框的Cell
                table.addCell(getCellNoBorder().add(new Paragraph(annotation.colName()).setFont(font)));
                //字体样式右对齐，默认是左对齐的
                table.addCell(getCellNoBorder().add(new Paragraph(map.get(field.getName())==null?"-":map.get(field.getName()).toString())).setFont(font));
            }
        }
    }

    /**
     * 有表头的Table
     * @param a
     * @param maps
     * @param font
     * @param table
     */
    public static void generateHeadTable(Field[] a, List<Map<String,Object>> maps, PdfFont font, Table table){
        //表头
        for (Field field : a) { //遍历模板字段
            PdfValue annotation = field.getDeclaredAnnotation(PdfValue.class);//获取字段属性上的注释
            table.addCell(new Paragraph(annotation.colName()).setFont(font).setFontSize(10));
        }
        //内容
        maps.forEach(map->{
            for (Field field : a) { //遍历模板字段
                //字体样式右对齐，默认是左对齐的
                table.addCell(new Paragraph(map.get(field.getName())==null?"-": map.get(field.getName()).toString())).setFont(font).setFontSize(10);
            }
        });

    }

}

